/**
 * 车上最初有capacity个空座位。车只能向一个方向行驶（也就是说，不允许掉头或改变方向）
 *
 * 给定整数capacity和一个数组 trips , trip[i] = [numPassengersi, fromi, toi]表示第 i 次旅行有numPassengersi乘客，接他们和放他们的位置分别是fromi和toi。这些位置是从汽车的初始位置向东的公里数。
 *
 * 当且仅当你可以在所有给定的行程中接送所有乘客时，返回true，否则请返回 false。
 * 链接：https://leetcode.cn/problems/car-pooling
 */
class CarPoolingDiff {
    public boolean carPooling(int[][] trips, int capacity) {
        int max=0;
        for(int[] trip:trips) {
            max=Math.max(max,trip[2]);
        }
        int[] diff=new int[max+2];
        for(int[] trip:trips) {
            diff[trip[1]]+=trip[0];
            diff[trip[2]]-=trip[0];//可以在同一个车站上下车，比如说1到5，在5的时候车上的人已经下次，已经有空位了，所以在5这个车站没必要加人数
        }
        int t=0;
        for(int i=0;i<max+2;i++) {
            t=t+diff[i];
            if(t>capacity) {
                return false;
            }
        }
        return true;
    }
}